package com.myapp.bd;

import com.myapp.bean.Enseignant;
import com.myapp.bean.Etudiant;
import com.myapp.bean.InfosStage;
import com.myapp.bean.MaitreDeStage;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;

/**
 * .
 * Classe regroupant toutes les fonctions li�es � la BD (connexion, d�connexion
 * ...)
 *
 * @author Astrid
 *
 */
public class QueryBD {

    // Constantes
    public static final String NOM = "NOM";
    public static final String PRENOM = "PRENOM";
    public static final String EMAIL = "EMAIL";
    public static final String MIAGE03 = "MIAGE03";
    public static final String DIFFMIAGE = "diffMIAGE";
    public static final String ADRESSEMIAGE03 = "172.19.2.54";
    public static final int N3 = 3;
    public static final int N4 = 4;
    public static final int N5 = 5;
    private static Connection cx;
    private static String url;
    private static String loginBD;
    private static String pwdBD;
    private ResultSet rs;
    private Statement st;
    private static Properties prop;

    public QueryBD(String path) {
        String driver = "";
        modifProp();
        FileInputStream in = null;
        try {
            in = new FileInputStream(path + "/WEB-INF/BD.properties");
        } catch (Exception e) {
            e.getMessage();
        }
        try {
            prop.load(in);
            driver = prop.getProperty("Driver");
            // Recuperer l'adresse IP de cet hote
            InetAddress adressIPHote = null;
            try {
                adressIPHote = InetAddress.getLocalHost();
            } catch (UnknownHostException e) {
                e.getMessage();
            }
            // Comparer avec IP de Miage 03
            if (adressIPHote != null) {
                if (adressIPHote.getHostAddress().equals(ADRESSEMIAGE03)) {
                    modifUrl(MIAGE03);
                    // si OK alors charger les identifiants MIAGE 03 MIAGE03
                    modifLoginBD(MIAGE03);
                    modifPwdBD(MIAGE03);
                } else {
                    modifUrl(DIFFMIAGE);
                    // sinon charger ce qui suit
                    modifLoginBD(DIFFMIAGE);
                    modifPwdBD(DIFFMIAGE);
                }
            }
        } catch (IOException e) {
            e.getMessage();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.getMessage();
            }
        }
        try {
            Class.forName(driver);
        } catch (Exception ex) {
            ex.getMessage();
        }
        try {
            modifCx();
        } catch (SQLException ex) {
            ex.getMessage();
        }
    }

    /**
     * Récupération du paramètre cx pour la connexion
     *
     * @throws SQLException
     */
    private static void modifCx() throws SQLException {
        QueryBD.cx = DriverManager.getConnection(url, loginBD, pwdBD);
    }

    /**
     * Récupération du paramètre url pour récupérer l'adresse du fichier
     * properties
     */
    private static void modifUrl(String typeLog) {
        if (typeLog.equals(MIAGE03)) {
            QueryBD.url = prop.getProperty("UrlBdMiage03");
        } else {
            QueryBD.url = prop.getProperty("UrlBd");
        }
    }

    /**
     * Récupération du paramètre loginBD
     */
    private static void modifLoginBD(String typeLog) {
        if (typeLog.equals(MIAGE03)) {
            QueryBD.loginBD = prop.getProperty("loginBDMiage03");
        } else {
            QueryBD.loginBD = prop.getProperty("loginBD");
        }
    }

    /**
     * Récupération du paramètre pwdBD
     */
    private static void modifPwdBD(String typePwd) {
        if (typePwd.equals(MIAGE03)) {
            QueryBD.pwdBD = prop.getProperty("pwdBDMiage03");
        } else {
            QueryBD.pwdBD = prop.getProperty("pwdBD");
        }

    }

    /**
     * Récupération du paramètre prop
     */
    private static void modifProp() {
        QueryBD.prop = new Properties();
    }

    public QueryBD() {
    }

    /**
     * .
     * Fonction de d�connexion.
     */
    public void closeCo() {
        try {
            cx.close();
        } catch (SQLException ex) {
            ex.getMessage();
        }
    }

    /**
     * Execute la requête envoyée en paramètre
     *
     * @param query
     * @return
     */
    private boolean effectueRequete(String query) {
        try {
            st = cx.createStatement();
            rs = st.executeQuery(query);
            if (rs.next()) {
                return true;
            }
            return false;
        } catch (SQLException ex) {
            ex.getMessage();
        }
        return false;
    }

    /**
     * Vérifie si le login et le pwd existe dans la BD.
     *
     * @param login
     * @param pwd
     * @return : renvoie le type de l'utilisateur (étudiant,enseignant,maître de
     * stage, secrétariat)
     */
    public String verif(String login, String pwd) throws SQLException {
        String query = "SELECT * FROM CANDIDAT WHERE LOG_IN = '" + login + "' AND MOT_DE_PASSE = '" + pwd + "'";
        if (effectueRequete(query)) {
            rs.close();
            st.close();
            return "etudiant";
        } else {
            query = "SELECT * FROM type_poste INNER JOIN enseignant ON "
                    + "type_poste.nposte = enseignant.nposte WHERE "
                    + "type_poste.type_poste = 'secretaire' AND "
                    + "enseignant.login = '" + login + "' AND enseignant.pwd = '" + pwd + "'";
            if (effectueRequete(query)) {
                rs.close();
                st.close();
                return "secretariat";
            } else {
                query = "SELECT * FROM MAITREDESTAGE WHERE LOGIN = '" + login + "' AND PWD = '" + pwd + "'";
                if (effectueRequete(query)) {
                    rs.close();
                    st.close();
                    return "maitreDeStage";
                } else {
                    query = "SELECT * FROM ENSEIGNANT WHERE LOGIN = '" + login + "' AND PWD = '" + pwd + "'";
                    if (effectueRequete(query)) {
                        rs.close();
                        st.close();
                        return "enseignant";
                    }
                }
            }
        }
        rs.close();
        st.close();
        return "nonReconnu";
    }

    public boolean effectueRequeteInsert(String query) throws SQLException {
        st = cx.createStatement();
        int res = st.executeUpdate(query);
        if (res != 0) {
            return true;
        }
        return false;
    }

    /**
     *
     * @param nom
     * @param prenom
     * @param promotion
     * @return
     * @throws SQLException
     */
    public String creerStage(int nCandidat) throws SQLException {
        String query;
        int numEntreprise;
        int numOffreStage;
        int numetudiant;

        //on recupere le numero de l'etudiant
        query = "select netudiant from etudiant where ncandidat='" + nCandidat + "'";
        if (effectueRequete(query)) {
            //recup du numeroetudiant
            numetudiant = rs.getInt(1);
            System.out.println("numero dans query bd" + numetudiant);


            //creation entreprise
            query = "Insert into ENTREPRISE (NENTREPRISE,NOM,ADRESSE,TELEPHONE,MAIL)select max(nentreprise)+1,'','','','' from ENTREPRISE";
            if (effectueRequeteInsert(query)) {
                //recuperation numero entreprise qui vient d'etre inseré
                query = "Select max(NENTREPRISE) FROM ENTREPRISE";

                if (effectueRequete(query)) {
                    numEntreprise = rs.getInt(1);
                    //creation offre de stage
                    query = "Insert into offre_de_stage (NOFFRE_STAGE, DATE_FIN_STAGE, DATE_DATE_DEBUT_STAGE, NENTREPRISE,DESCRIPTION_POSTE) select max(NOFFRE_STAGE)+1,'22/06/92' ,'22/06/92'," + numEntreprise + ",'titre*activites*competences' from offre_de_stage";
                    if (effectueRequeteInsert(query)) {
                        //recuperation numero offre stage qui vient d'etre inseré
                        query = "Select max(NOFFRE_STAGE) FROM OFFRE_DE_STAGE";
                        if (effectueRequete(query)) {
                            numOffreStage = rs.getInt(1);
                            //creation convention
                            query = "Insert into convention_de_stage (NCONVENTION, NOFFRE_STAGE, NETUDIANT, DATESIGNATUREC,DUREEC) select max(NCONVENTION)+1," + numOffreStage + "," + numetudiant + ",'22/06/92',null from convention_de_stage";
                            if (effectueRequeteInsert(query)) {
                                //creation maitre de stage
                                query = "Insert into maitredestage (NMAITREDESTAGE,NENTREPRISE, NOM, PRENOM, ADRESSE,TELEPHONE,DATENAISSANCE, LOGIN,PWD,EMAIL) select max(NMAITREDESTAGE)+1," + numEntreprise + ",null,null,null,null,null,null,null,null from maitredestage";
                                System.out.println("query = " + query);
                                if (effectueRequeteInsert(query)) {
                                    rs.close();
                                    st.close();
                                    return "stageCree";
                                }
                            }
                        }
                    }
                }
            }


        }
        rs.close();
        st.close();
        return "stageNonCree";
    }

    /**
     *
     * @param nomPromo
     * @return
     */
    public List recupListeEtudiantParPromo(String nomPromo) throws SQLException {
        int niveau = 0;
        String query;
        if (nomPromo.equalsIgnoreCase("L3C")) {
            niveau = N3;
        } else if (nomPromo.equalsIgnoreCase("M1C")) {
            niveau = N4;
        } else if (nomPromo.equalsIgnoreCase("M2C")) {
            niveau = N5;
        }
        query = "SELECT CANDIDAT.NCANDIDAT,CANDIDAT.NOM, CANDIDAT.PRENOM, FORMATION.NIVEAU,FORMATION.TYPE_FORMATION"
                + " FROM CANDIDAT INNER JOIN (POSTULE INNER JOIN(PROMOTION INNER JOIN FORMATION "
                + "ON PROMOTION.NFORMATION = FORMATION.NFORMATION)"
                + "ON POSTULE.NPROMOTION = PROMOTION.NPROMOTION)"
                + "ON CANDIDAT.NCANDIDAT = POSTULE.NCANDIDAT WHERE FORMATION.NIVEAU = " + niveau
                + " AND FORMATION.TYPE_FORMATION = 'Classique'";
        if (effectueRequete(query)) {
            List listEtudiant = new ArrayList<Etudiant>();
            while (rs.next()) {
                Etudiant e = new Etudiant();
                e.setnCandidat(rs.getInt("NCANDIDAT"));
                e.setNom(rs.getString(NOM));
                e.setPrenom(rs.getString(PRENOM));
                e.setNiveau(rs.getInt("NIVEAU"));
                e.setTypeFormation(rs.getString("TYPE_FORMATION"));
                e.setPromotion(nomPromo);
                listEtudiant.add(e);
            }
            rs.close();
            st.close();
            return listEtudiant;
        }
        rs.close();
        st.close();
        return null;
    }

    public Etudiant recupInfoEtudiant(int nCandidat) throws SQLException {


        String query = "SELECT * FROM CANDIDAT WHERE NCANDIDAT= " + nCandidat;
        if (effectueRequete(query)) {


            Etudiant e = new Etudiant();
            e.setNom(rs.getString(NOM));
            e.setPrenom(rs.getString(PRENOM));
            e.setAdresse(rs.getString("ADRESSE"));
            e.setDateNaissance(rs.getDate("DATENAISSANCE"));
            e.setTelephone(rs.getString("TELEPHONE"));
            e.setMail(rs.getString(EMAIL));
            rs.close();
            st.close();
            return e;
        }
        rs.close();
        st.close();
        return null;
    }

    /**
     * Récupère la liste des enseignants à notifier
     *
     * @param listEtudiants
     * @return
     */
    public Set recupEnseignantsNotif(String[] listEtudiants) throws SQLException {
        // On utilise un hashSet car on ne veut pas de doublons dans la liste des destinataires
        Set listEnseignants = new HashSet<Enseignant>();
        // 1- On parcourt la liste des étudiants
        for (String e : listEtudiants) {
            // 2- Pour chaque étudiant, on lance une requete sur la BD 
            int nEtudiant = Integer.parseInt(e);
            // /!\ Query provisoire /!\
            String query = "SELECT enseignant.nom,enseignant.prenom,enseignant.email "
                    + "FROM CANDIDAT INNER JOIN "
                    + "( ETUDIANT INNER JOIN (CONVENTION_DE_STAGE "
                    + "INNER JOIN (OFFRE_DE_STAGE INNER JOIN (JOURS INNER JOIN "
                    + "(CRENEAU INNER JOIN ENSEIGNANT ON CRENEAU.NENSEIGNANT = ENSEIGNANT.NENSEIGNANT) "
                    + "ON JOURS.DATE_JOUR = CRENEAU.DATE_CRENEAU) "
                    + "ON OFFRE_DE_STAGE.DATE_FIN_STAGE = JOURS.DATE_JOUR) "
                    + "ON CONVENTION_DE_STAGE.NOFFRE_STAGE = OFFRE_DE_STAGE.NOFFRE_STAGE) "
                    + "ON ETUDIANT.NETUDIANT = CONVENTION_DE_STAGE.NETUDIANT) "
                    + "ON CANDIDAT.NCANDIDAT = ETUDIANT.NCANDIDAT "
                    + "WHERE CANDIDAT.NCANDIDAT = " + nEtudiant;
            if (effectueRequete(query)) {
                // 3- On récupère l'enseignant associé à l'étudiant
                Enseignant ens = null;
                while (rs.next()) {
                    ens = new Enseignant();
                    ens.setNom(rs.getString(NOM));
                    ens.setPrenom(rs.getString(PRENOM));
                    ens.setEmail(rs.getString(EMAIL));
                }
                // 4- On l'insère dans la listEnseignants 
                listEnseignants.add(ens);
            }
        }
        return listEnseignants;
    }

    /**
     * Récupère la liste des maîtres de stage à notifier
     *
     * @param listEtudiants
     * @return
     * @throws SQLException
     */
    public Set recupMaitreDeStageNotif(String[] listEtudiants) throws SQLException {
        // On utilise un hashSet car on ne veut pas de doublons dans la liste des destinataires
        Set listMaitreDeStage = new HashSet<MaitreDeStage>();
        // 1- On parcourt la liste des étudiants
        for (String e : listEtudiants) {
            // 2- Pour chaque étudiant, on lance une requete sur la BD 
            int nEtudiant = Integer.parseInt(e);
            // /!\ Query provisoire /!\
            String query = "SELECT maitredestage.nom,maitredestage.prenom,maitredestage.email "
                    + "FROM CANDIDAT INNER JOIN (ETUDIANT INNER JOIN "
                    + "(CONVENTION_DE_STAGE INNER JOIN (OFFRE_DE_STAGE INNER JOIN "
                    + "(ENTREPRISE INNER JOIN MAITREDESTAGE "
                    + "ON ENTREPRISE.NENTREPRISE = MAITREDESTAGE.NENTREPRISE) "
                    + "ON OFFRE_DE_STAGE.NENTREPRISE = ENTREPRISE.NENTREPRISE) "
                    + "ON CONVENTION_DE_STAGE.NOFFRE_STAGE = OFFRE_DE_STAGE.NOFFRE_STAGE) "
                    + "ON CONVENTION_DE_STAGE.NETUDIANT = ETUDIANT.NETUDIANT) "
                    + "ON CANDIDAT.NCANDIDAT = ETUDIANT.NETUDIANT WHERE CANDIDAT.NCANDIDAT = " + nEtudiant;
            if (effectueRequete(query)) {
                // 3- On récupère l'enseignant associé à l'étudiant
                MaitreDeStage mds = null;
                while (rs.next()) {
                    mds = new MaitreDeStage();
                    mds.setNom(rs.getString(NOM));
                    mds.setPrenom(rs.getString(PRENOM));
                    mds.setEmail(rs.getString(EMAIL));
                }
                // 4- On l'insère dans la listEnseignants 
                listMaitreDeStage.add(mds);
            }
        }
        return listMaitreDeStage;
    }

    public Set recupEtudiantsNotif(String[] listEtudiants) throws SQLException {
        // On utilise un hashSet car on ne veut pas de doublons dans la liste des destinataires
        Set listeEtudiants = new HashSet<Etudiant>();
        // 1- On parcourt la liste des étudiants
        for (String e : listEtudiants) {
            // 2- Pour chaque étudiant, on lance une requete sur la BD 
            int nEtudiant = Integer.parseInt(e);
            // /!\ Query provisoire /!\
            String query = "SELECT NOM,PRENOM,EMAIL FROM CANDIDAT WHERE CANDIDAT.NCANDIDAT = " + nEtudiant;
            if (effectueRequete(query)) {
                // 3- On récupère l'enseignant associé à l'étudiant
                Etudiant etu = null;
                while (rs.next()) {
                    etu = new Etudiant();
                    etu.setNom(rs.getString(NOM));
                    etu.setPrenom(rs.getString(PRENOM));
                    etu.setMail(rs.getString(EMAIL));
                }
                // 4- On l'insère dans la listEnseignants 
                listeEtudiants.add(etu);
            }
        }
        return listeEtudiants;
    }

    /**
     *
     * @param numCandidat
     * @throws SQLException permet de mettre a jour les infos dus tage d'un
     * étudiant
     */
    public String modifierStage(int numCandidat, String titreStage, String activite, String adresse, String competences,
            String debut, String emailTuteur, String entreprise, String fin, String nomTuteur,
            String prenomTuteur, String telephoneEntreprise, String telephoneTuteur, String dateSignature,
            int duree) throws SQLException {
        String query = "select netudiant from etudiant where ncandidat='" + numCandidat + "'";
        if (effectueRequete(query)) {
            //recup du numeroetudiant
            int numetudiant = rs.getInt(1);
            //modif info conventions
            query = "UPDATE convention_de_stage SET datesignaturec ='" + dateSignature + "', dureec = '" + duree + "' WHERE netudiant='" + numetudiant + "'";
            if (effectueRequeteInsert(query)) {
                //recuperer le numero de l'offre de stage 
                query = "Select NOFFRE_STAGE FROM convention_de_stage where NETUDIANT='" + numetudiant + "'";
                if (effectueRequete(query)) {
                    int numOffreStage = rs.getInt(1);
                    //modif info offre de stage
                    //concatenation des infos stages
                    String description_poste = titreStage + "*" + activite + "*" + competences;
                    query = "update offre_de_stage set description_poste='" + description_poste + "',date_date_debut_stage='" + debut + "',date_fin_stage='" + fin + "' where noffre_stage='" + numOffreStage + "'";
                    if (effectueRequeteInsert(query)) //recuperer le numero entreprise
                    {
                        query = "Select nentreprise FROM offre_de_stage where noffre_stage='" + numOffreStage + "' ";
                        if (effectueRequete(query)) {
                            int numeroEntreprise = rs.getInt(1);
                            //modif info entreprise
                            query = "update entreprise set nom='" + entreprise + "',adresse='" + adresse + "',telephone='" + telephoneEntreprise + "'where nentreprise='" + numeroEntreprise + "'";
                            if (effectueRequeteInsert(query)) {
                                query = "update maitredestage set nom='" + nomTuteur + "',prenom='" + prenomTuteur + "',email='" + emailTuteur + "',telephone='" + telephoneTuteur + "' where nentreprise='" + numeroEntreprise + "'";
                                if (effectueRequeteInsert(query)) {
                                    return "stageModifie";
                                }
                            }
                        }
                    }
                }

            }
        }
        return null;

    }

    /**
     *
     * @param numCandidat
     * @return
     * @throws SQLException permet de vérifier les champs deja remplis pour les
     * infos du stage de l'étudiant
     */
    public InfosStage verifChampsStages(int numCandidat) throws SQLException {
        String query = "SELECT CONVENTION_DE_STAGE.DATESIGNATUREC,"
                + "CONVENTION_DE_STAGE.DUREEC, "
                + "OFFRE_DE_STAGE.DATE_FIN_STAGE, "
                + "OFFRE_DE_STAGE.DATE_DATE_DEBUT_STAGE, "
                + "OFFRE_DE_STAGE.DESCRIPTION_POSTE, "
                + "ENTREPRISE.NOM, "
                + "ENTREPRISE.ADRESSE, "
                + "ENTREPRISE.TELEPHONE, "
                + "ENTREPRISE.MAIL, "
                + "MAITREDESTAGE.NOM, "
                + "MAITREDESTAGE.PRENOM, "
                + "MAITREDESTAGE.TELEPHONE, "
                + "MAITREDESTAGE.EMAIL "
                + "FROM MAITREDESTAGE INNER JOIN (ENTREPRISE INNER JOIN "
                + "(OFFRE_DE_STAGE INNER JOIN (CONVENTION_DE_STAGE INNER JOIN "
                + "(ETUDIANT INNER JOIN CANDIDAT ON ETUDIANT.NCANDIDAT = CANDIDAT.NCANDIDAT )"
                + "ON CONVENTION_DE_STAGE.NETUDIANT = ETUDIANT.NETUDIANT )"
                + "ON OFFRE_DE_STAGE.NOFFRE_STAGE = CONVENTION_DE_STAGE.NOFFRE_STAGE )"
                + "ON ENTREPRISE.NENTREPRISE = OFFRE_DE_STAGE.NENTREPRISE )"
                + "ON MAITREDESTAGE.NENTREPRISE = ENTREPRISE.NENTREPRISE "
                + "WHERE CANDIDAT.NCANDIDAT =" + numCandidat;
        InfosStage infosStage = new InfosStage();
        if (effectueRequete(query)) {

            //infos stages

            /*split pour separer le titre du stage ,les activités et les competences requises
             (toutes les infos sont dans le champs description de la table offre_de_stage,
             * séparés par des * 
             */

            StringTokenizer sto;
            sto = new StringTokenizer(rs.getString(5), "*");
            infosStage.setTitre(sto.nextToken());
            infosStage.setActivite(sto.nextToken());
            infosStage.setCompetences(sto.nextToken());

            infosStage.setDateSignatureC(rs.getDate(1));
            infosStage.setDebut(rs.getDate(4));
            infosStage.setFin(rs.getDate(3));

            //infos entreprise
            infosStage.setAccueil(rs.getString(6));
            infosStage.setAdresse(rs.getString(7));
            infosStage.setTelephoneEntreprise(rs.getString(8));

            //infos tuteur entreprise
            infosStage.setNomTuteur(rs.getString(10));
            infosStage.setPrenomTuteur(rs.getString(11));
            infosStage.setTelephoneTuteur(rs.getString(12));
            infosStage.setEmailTuteur(rs.getString(13));
            return infosStage;
        }
        return null;
    }

    /**
     * Récupère le n° du stagiaire d'un maitre de stage
     *
     * @param nMaitreStage
     * @return
     * @throws SQLException
     */
    public int recupNCandidat(int nMaitreStage) throws SQLException {
        String query = "SELECT CANDIDAT.NCANDIDAT FROM MAITREDESTAGE "
                + "INNER JOIN (ENTREPRISE INNER JOIN (OFFRE_DE_STAGE "
                + "INNER JOIN (CONVENTION_DE_STAGE "
                + "INNER JOIN (ETUDIANT INNER JOIN CANDIDAT "
                + "ON ETUDIANT.NCANDIDAT = CANDIDAT.NCANDIDAT) "
                + "ON CONVENTION_DE_STAGE.NETUDIANT = ETUDIANT.NETUDIANT) "
                + "ON OFFRE_DE_STAGE.NOFFRE_STAGE = CONVENTION_DE_STAGE.NOFFRE_STAGE) "
                + "ON ENTREPRISE.NENTREPRISE = OFFRE_DE_STAGE.NENTREPRISE) "
                + "ON MAITREDESTAGE.NENTREPRISE = ENTREPRISE.NENTREPRISE "
                + "WHERE MAITREDESTAGE.NMAITREDESTAGE = " + nMaitreStage;
        int nCandidat = -1;
        if (effectueRequete(query)) {
            nCandidat = rs.getInt(1);
        }
        return nCandidat;
    }

    /**
     * Récupère le n° d'un maitre de stage lors de la connexion
     *
     * @param login
     * @param pwd
     * @return
     * @throws SQLException
     */
    public int recupNMaitreStage(String login, String pwd) throws SQLException {
        String query = "SELECT nmaitredestage FROM MAITREDESTAGE "
                + "WHERE login = '" + login + "' AND pwd = '" + pwd + "'";
        int nMaitreStage = -1;
        if (effectueRequete(query)) {
            nMaitreStage = rs.getInt(1);
        }
        return nMaitreStage;
    }

    public int recupNCandidatCo(String login, String pwd) throws SQLException {
        String query = "SELECT NCANDIDAT FROM CANDIDAT "
                + "WHERE LOG_IN = '" + login + "' AND MOT_DE_PASSE = '" + pwd + "'";
        int nCandidat = -1;
        if (effectueRequete(query)) {
            nCandidat = rs.getInt(1);
        }
        return nCandidat;
    }

    public int recupNEnseignantCo(String login, String pwd) throws SQLException {
        String query = "SELECT NENSEIGNANT FROM ENSEIGNANT "
                + "WHERE LOGIN = '" + login + "' AND PWD = '" + pwd + "'";
        int nEnseignant = -1;
        if (effectueRequete(query)) {
            nEnseignant = rs.getInt(1);
        }
        return nEnseignant;
    }

    public void ajoutFichierBd(String type, String chemin, String typeUtilisateur, int nUtilisateur, String dateDepot) throws SQLException {
        int nFichier = 0;
        String query2 = "Select max(NFICHIER) FROM FICHIER";
        if (effectueRequete(query2)) {
            nFichier = (rs.getInt(1)) + 1;
        }
        if (typeUtilisateur.equalsIgnoreCase("etudiant")) {

            String query = "INSERT INTO FICHIER (NFICHIER,TYPE,CHEMIN,REFCANDIDAT,REFENSEIGNANT,REFMAITRESTAGE,DATEDEPOT) VALUES"
                    + "('" + nFichier + "','" + type + "','" + chemin + "','" + nUtilisateur + "',null,null,'" + dateDepot + "')";
            System.out.println("" + query);
            effectueRequeteInsert(query);
        } else if (typeUtilisateur.equalsIgnoreCase("enseignant")) {
            String query = "INSERT INTO FICHIER (NFICHIER,TYPE,CHEMIN,REFCANDIDAT,REFENSEIGNANT,REFMAITRESTAGE,DATEDEPOT) VALUES"
                    + "('" + nFichier + "','" + type + "','" + chemin + "',null,'" + nUtilisateur + "',null,'" + dateDepot + "')";
            effectueRequeteInsert(query);
        } else if (typeUtilisateur.equalsIgnoreCase("maitre")) {
            String query = "INSERT INTO FICHIER (NFICHIER,TYPE,CHEMIN,REFCANDIDAT,REFENSEIGNANT,REFMAITRESTAGE,DATEDEPOT) VALUES"
                    + "('" + nFichier + "','" + type + "','" + chemin + "',null,null,'" + nUtilisateur + "','" + dateDepot + "')";
            effectueRequeteInsert(query);
        }
    }
}
